<?php

/**
 * Notificacion form.
 *
 * @package    Sanitas
 * @subpackage form
 * @author     Jose Antonio Sánchez Bedoya
 * @version    SVN: $Id: sfDoctrineFormTemplate.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class NotificacionForm extends BaseNotificacionForm
{
  //protected $scheduledForDeletion = array();
  protected $numbersToDelete = array();
    
  public function configure()
  {   
      //Following code will remove Required validators from these fields.
  	unset($this->validatorSchema['created_at']);
  	unset($this->validatorSchema['updated_at']);
  	
  	//following code will remove fields from form
  	unset($this->widgetSchema['created_at']);
  	unset($this->widgetSchema['updated_at']);
  	
  	$this->widgetSchema['fecha_lanzamiento'] = new sfWidgetFormJQueryDate(array(
    	       //'format' => '%date%', 
  	           'culture' => sfContext::getInstance()->getUser()->getCulture(),
                   'image' => '/images/calendar.gif',
  	)); 
        
  	$this->widgetSchema['fecha_lanzamiento']->getOption('date_widget')->setOption('format', '%day%/%month%/%year%');
        
        //$this->widgetSchema['texto'] = new sfWidgetFormTextarea(array(),array('class' => 'foo', 'style' => 'width: 400px; height: 60px;'));
        
        /*$this->widgetSchema['texto'] = new sfWidgetFormCKEditor();
        
        //Configuramos el editor aquí, puesto que no sale en la configuración del js
        $editor = $this->widgetSchema['texto']->getEditor();
        $editor->config['language'] = 'es';
        //$editor->config['uiColor'] = '#1980AF';
        $editor->config['resize_enabled'] = false;
        $editor->config['width'] = 550;
        $editor->config['height'] = 150; 
        $editor->config['toolbar'] = array(
            array('Bold','Italic','Underline','Strike','-','Subscript','Superscript'),
            array('NumberedList','BulletedList','-','Outdent','Indent','Blockquote'),
            array('JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'),
	    array('Link','Unlink','Anchor'),
            '/',
            array('Styles','Format','Font','FontSize'),
	    array('TextColor','BGColor')
            );          
        */
        $this->widgetSchema['texto'] = new sfWidgetFormTextareaTinyMCE(array(
            'width'  => 650,
            'height' => 100,        
            'config' => 'theme_advanced_disable: "anchor,image,cleanup,help",
                theme_advanced_buttons1 : "bold,italic,underline,strikethrough,separator,bullist,numlist,separator,sub,sup,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,fontselect,fontsizeselect,forecolor,backcolor,separator,code"',
        ));
        
        $this->setWidget('adjunto1', new sfWidgetFormInputFile( ));
        $this->validatorSchema['adjunto1'] = new sfValidatorFile(array(
	                'required'      => false,	                
	                'max_size'      => '1048576',
	                'path'          => sfConfig::get('app_email_attachments'),
	            )); 

        
        $this->setWidget('adjunto2', new sfWidgetFormInputFile( ));
        $this->validatorSchema['adjunto2'] = new sfValidatorFile(array(
	                'required'      => false,	                
	                'max_size'      => '1048576',
	                'path'          => sfConfig::get('app_email_attachments'),
	            )); 

       
        // Para añadir el nombre del cliente_id
        $this->validatorSchema->setOption('allow_extra_fields', true);
        $this->setWidget('contacto_id', new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('Contacto'), 'add_empty' => true)));
        //$this->setWidget('contacto_id',new sfWidgetFormInputText(array('with_empty' => false)));
        $this->setWidget('cliente_nombre', new sfWidgetFormInputText(array(), array('class' => 'lectura', 'size'=>'35px')));
        //$this->setValidator('contacto_id', new sfValidatorPass(array('required' => true)));
        $this->setValidator('cliente_nombre', new sfValidatorPass(array('required' => false)));
      
        $this->validatorSchema['asunto'] = new sfValidatorString(array('max_length' => 100, 'required' => true));
        $this->validatorSchema['fecha_lanzamiento'] = new sfValidatorDate(array('required' => true));
  	$this->validatorSchema['texto'] = new sfValidatorString(array('required' => false));
        
         // Relaciono con Adjunto (rel. 1 a muchos), el nombre de la relación lo miro en el schema.yml
	//$this->embedRelation('AdjuntoNotificacion');
      
  }
  
  /*
   * Los siguientes métodos se utilizan con formularios embebidos, 
   * pero de momento no consigo integrarlos con campos de tipo InputFile
   * 
   */
  // Método necesario para hacer campos en blanco en el formulario embebido Adjunto
  /*
  public function addNewFields($number){
    $new_adjunto = new BaseForm();

    for($i=0; $i <= $number; $i+=1){
      $adjunto = new AdjuntoNotificacion();
      $adjunto->setNotificacion($this->getObject());
      $adjunto_form = new AdjuntoNotificacionForm($adjunto);

      $new_adjunto->embedForm($i,$adjunto_form);
    }

    $this->embedForm('new', $new_adjunto);
    
  }
  
  public function bind(array $taintedValues = null, array $taintedFiles = null){

    $new_adjuntos = new BaseForm();
    if (isset($taintedValues['new'])){
      foreach($taintedValues['new'] as $key => $objetoadjunto){
         $objetoadjunto = new AdjuntoNotificacion();
         $objetoadjunto->setNotificacion($this->getObject());
         $adjunto_form = new AdjuntoNotificacionForm($objetoadjunto);

         $new_adjuntos->embedForm($key,$adjunto_form);
       }

       $this->embedForm('new',$new_adjuntos);
    }
    
    parent::bind($taintedValues, $taintedFiles);
  }
  
  
  protected function doBind(array $values) {
  
    if (isset($values['AdjuntoNotificacion'])) {
      foreach ($values['AdjuntoNotificacion'] as $key => $adjunto) {
        if (isset($adjunto['delete']) && $adjunto['id']) {
          $this->numbersToDelete[$key] = $adjunto['id'];
        }
      }
    }
   
    parent::doBind($values);
  }
  
  //No sé si por nuestras especificaciones se va a utilizar, quizás si editamos notificaciones aún no enviadas.
  protected function doUpdateObject($values) {
    // step 4.4
    if (count($this->numbersToDelete)) {
      foreach ($this->numbersToDelete as $index => $id) {
        unset($values['AdjuntoNotificacion'][$index]);
        unset($this->object['AdjuntoNotificacion'][$index]);
        // En la web http://di-side.com/di-side/symfony-embedrelation-one-to-many-doctrine-relations/ aparece así pero lo hago con la orden de Doctrine
        //PhoneNumberTable::getInstance()->findOneById($id)->delete();
        Doctrine_Core::getTable('AdjuntoNotificacion')->findOneById($id)->delete();
      }
    }
    parent::doUpdateObject($values);
  }
  
  
  public function saveEmbeddedForms($con = null, $forms = null) {
    if (null === $con) {
      $con = $this->getConnection();
    }

    if (null === $forms) {
      $forms = $this->embeddedForms;
    }
    $this->forms = $forms; //Para depurar y saber lo que estoy depurando.   
    foreach ($forms as $form) {
      $this->name=$form->getName();
      if ($form instanceof sfFormObject) {
        // step 4.5
        if (!in_array($form->getObject()->getId(), $this->numbersToDelete)) {
          $form->saveEmbeddedForms($con);
          $this->name=$form->getName();
          if ($this->name =="adjunto_notificacion"){
              $adjunto = $form->getObject()->getNombre(); //???????
          }
          //if ((($form->getName()=="adjunto_notificacion")&&($adjunto!=""))){
          if (($this->name =="adjunto_notificacion")){
               $form->getObject()->save($con);
          }
          
        }
      } else {
        //$form->getObject()->save($con); //Prueba para que guarde adjuntos, no funciona
        $this->saveEmbeddedForms($con, $form->getEmbeddedForms());
      }
    }
  }
   * 
   * 
   */
}
